/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.apolo.repositorio;

/**
 *
 * @author armando
 */
import java.util.LinkedList;
import java.util.List;
import com.apolo.entidades.Pessoa;

/**
 * @author armando
 *
 */
public class RepositorioPessoaLista {

	private List<Pessoa> listaPessoas;

	private int geraCodigo = 0; // para gerar codigos das pessoas cadastradas

	/**
	 * Ao instanciar um RepositorioPessoaLista o mesmo ja cria uma Lista ligada do Tipo Pessoa
	 * @see Pessoa
	 */
	public RepositorioPessoaLista() {
		this.listaPessoas = new LinkedList<Pessoa>();
	}

	/**
	 * Faz a busca de uma dada Pessoa e retorna o indice da Lista de Pessoas
	 * @param codigo Codigo da Pessoa pesquisada
	 * @return indice da Pessoa pesquisada na Lista
	 */
	private int procurarIndice(int codigo) {
		int indice = 0;
		while (indice < listaPessoas.size()) {
			Pessoa p = listaPessoas.get(indice);
			if (p.getCodigo() == codigo)
				return indice;
			indice++;
		}
		return -1;
	}

	/**
	 * Insere uma Pessoa na Lista de Pessoas
	 * @param p Pessoa
	 * @return Codigo da Pessoa
	 */
	public int insere(Pessoa p){
		p.setCodigo(geraCodigo++);
		listaPessoas.add(p);
		return p.getCodigo();
	}

	/**
	 * Dado o Codigo da Pessoa, faz a busca dessa Pessoa na Lista de Pessoas
	 * @param codigo Codigo da Pessoa
	 * @return Pessoa Pessoa encontrada na Lista de Pessoas
	 */
	public Pessoa procura(int codigo){
		int indice = this.procurarIndice(codigo);
		if (indice >= 0){
                    return this.listaPessoas.get(indice);
                }else {
                    return null;
                }			
	}

	/**
	 * Checa se a Pessoa esta na Lista de Pessoa
	 * @param codigo Codigo da Pessoa
	 * @return True se a Pessoa foi encontra e False se a Pessoa nao foi encontrada
	 */
	public boolean existe(int codigo) {
		int indice = this.procurarIndice(codigo);
		if (indice >= 0)
			return true;
		else
			return false;

	}

	/**
	 * Dada uma Pessoa com os novos atributos faz a atualizacao da Pessoa
	 * @param p Pessoa
	 */
	public void atualiza(Pessoa p){
		int indice = this.procurarIndice(p.getCodigo());
		if (indice >= 0){
			this.listaPessoas.set(indice, p);
                }
	}

	/**
	 * Dado o Codigo da Pessoa, remove esta Pessoa da Lista de Pessoas
	 * @param codigo Codigo da Pessoa
	 */
	public void deleta(int codigo){
            //to do
	}

	/**
	 * @return A quantidade de Pessoas na Lista de Pessoas
	 */
	public int size() {
		return this.listaPessoas.size();
	}

	/** 
	 * Dada uma posicao na Lista de Pessoas, retorna a Pessoa da posicao corrente
	 * @param posicao Posicao na Lista de Pessoas
	 * @return Pessoa
	 */
	public Pessoa pegaElementoDaLista(int posicao) {
		if (posicao < listaPessoas.size())
			return listaPessoas.get(posicao);
		else
			return null;
	}
	
	/**
	 * 
	 * @return Lista de Pessoas
	 */
	public List<Pessoa> getListaPessoas(){
		return this.listaPessoas;
	}
}